<?php

namespace App\Http\Controllers\home;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
use Hash;
use Mail;
class ResetpassController extends Controller
{
    /**
     *  找回密码
     */
    public function getIndex()
    {
        // 加载模板
        return view('home.resetpass.index');
    }

    /**
    *   接受邮箱重置密码的数据
    */
    public function postEmailedit(Request $request)
    {
        // 表单验证
        $this -> validate($request,
          [
            'username' => 'required',
            'code' => 'required',
         
          ],
          [
            'username.required' => '邮箱不能为空',
            'code.required' => '请输入验证码',
           
          ]);

        // 邮箱账号和验证码
        $arr = $request -> only('username','code');

         // 判断验证码是否正确
        if (session('code') != $arr['code']) {
            return back() -> with('error','验证码不正确');
        };

        // 查询用户名是否存在
        $res = DB::table('user') -> where('username','=',$arr['username']) -> first();

         if ($res) {
            // 调用发送邮件的方法
            self::sendemail($res);

            return redirect('/home/resetpass') -> with('email_success','找回密码申请成功，请在24小时内查看邮箱并重置密码');

        } else {
            return back() -> with('error','用户名不存在');
        }
    }


    /**
    *   发送邮件的方法
    */

    static public function sendemail($data)
    {
        Mail::send('emails.resetpass', ['data' => $data] ,function($m) use($data) {
            $m -> to($data['username'],'亲爱的用户') -> subject('账号找回密码成功 请重置密码');
        });
   }

   /**
   *    重置密码的页面(重置密码)
   */
   public function getResetpage(Request $request)
   {
        // 接受要重置的用户ID和token
        $arr = $request -> all();

        return view('home.resetpass.resetpass',['arr'=>$arr]);
   }

   /**
   *    重置密码的操作
   */
   public function postUpdate(Request $request)
   {
        // 接收要重置密码的用户ID和token
        $arr = $request -> except('_token');
        
        // 查询数据表中用户的token值
        $res1 = DB::table('user') -> where('id','=',$arr['id']) -> first();

        // 判断查询的token值和接受的token值是否相同
        if ($arr['token'] == $res1['token']) {

            // 密码加密
            $data['password'] = Hash::make($arr['password']);

            // 用户激活要修改的数据
            $data['token'] = str_random(50);

            // 修改数据表里用户的数据
            $res = DB::table('user') ->where('id','=',$arr['id']) -> where('token','=',$arr['token']) -> update($data);
            
            // 判断密码是否重置成功
            if ($res) {
                return redirect('/home/resetpass/index') -> with('email_success','密码重置成功');
            } else {
                return redirect('/home/resetpass/index') -> with('email_success','密码重置失败');
            } 
        }
   }

    /**
    *   手机号重置密码页面
    */
    public function postPhoneedit(Request $request)
    {   
        // 表单验证
        $this -> validate($request,
          [
            'username' => 'required',
            'code' => 'required',
         
          ],
          [
            'username.required' => '邮箱不能为空',
            'code.required' => '请输入验证码',
           
          ]);

        // 判断验证码是否正确
        if (session('phoneCode') != $request -> input('code')) {
            return back() -> with('error','验证码不正确,请重新获取');
             // 将错误信息删除
            session() -> forget('phoneCodeError');
            return back();
        };

        // 将短信验证码注销掉 防止重复使用
        session() -> forget('phonecode');

        // 手机号
        $username = $request -> input('username');

        // 查询用户名是否存在
        $arr = DB::table('user') -> where('username','=',$username) -> first();

        if ($arr) {

            return view('.home.resetpass.resetpass',['arr'=>$arr]);

        } else {
            return back() -> with('error','用户名不存在');
        }
    }

    /**
    *   post方式提交
    */
    public function postPhone()
    {
        self::phone();
    }

    /**
    *   发送手机验证码开始
    */
    static public function phone()
    {
        //短信接口地址
        $target = "http://106.ihuyi.cn/webservice/sms.php?method=Submit";
        //获取手机号
        $mobile = $_POST['mobile'];
        session(['phoneCode'=>mt_rand(1000,9999)]);
        //生成的随机数
        $mobile_code = session('phoneCode');
        if(empty($mobile)){
            exit('手机号码不能为空');
        }
        
        $post_data = "account=C65463448&password=124702297dd840b8a672b2e1890e92d8&mobile=".$mobile."&content=".rawurlencode("您的验证码是：".$mobile_code."。请不要把验证码泄露给其他人。");
        //用户名请登录用户中心->验证码、通知短信->帐户及签名设置->APIID
        //查看密码请登录用户中心->验证码、通知短信->帐户及签名设置->APIKEY
        $gets =  self::xml_to_array(self::Post($post_data, $target));
        if($gets['SubmitResult']['code']==2){
            $_SESSION['mobile'] = $mobile;
        }
        echo $gets['SubmitResult']['msg'];
    }

    /**
    *   将 xml数据转换为数组格式。
    */
    static public function xml_to_array($xml)
    {
        $reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
        if(preg_match_all($reg, $xml, $matches)){
            $count = count($matches[0]);
            for($i = 0; $i < $count; $i++){
            $subxml= $matches[2][$i];
            $key = $matches[1][$i];
                if(preg_match( $reg, $subxml )){
                    $arr[$key] = self::xml_to_array( $subxml );
                }else{
                    $arr[$key] = $subxml;
                }
            }
        }
        return $arr;
    }

    /**
    *   请求数据到短信接口，检查环境是否 开启 curl init。
    */
    static public function Post($curlPost,$url){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_NOBODY, true);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
        $return_str = curl_exec($curl);
        curl_close($curl);
        return $return_str;
    }

}
